import axios from 'axios'
import { UniAdapter } from 'uniapp-axios-adapter'

const baseURL = 'http://localhost:8181/api'

const instance = axios.create({
  baseURL,
  timeout: 30 * 1000,
  adapter: UniAdapter,
  // TODO 1. 基础地址，超时时间
})

import router from '@/router'

import { useUserStore } from '@/stores/index'

//请求拦截器
instance.interceptors.request.use(
  (config) => {
    // TODO 2. 携带token
    const useStore = useUserStore()

    if (useStore.token) {
      config.headers = {
        token: useStore.token,
      } as any
    }
    console.log(config.headers.token)
    return config
  },
  (err) => {
    return Promise.reject(err)
  }
)

//响应拦截器
instance.interceptors.response.use(
  (res) => {
    // TODO 3. 处理业务失败
    // TODO 4. 摘取核心响应数据
    if (res.data.code === 200) {
      return res
    } else if (res.data.code === 403) {
      // TODO 6. 处理403错误
      // 错误的特殊情况：权限不足，token过期=>拦截到登录
      if (res.data.msg == '登录凭证无效或已过期') {
        uni.showToast({
          title: '登陆过期',
          icon: 'error',
          mask: true,
        })
        router.redirectTo({
          path: '/pages/loginPage/index',
        })
      } else {
        uni.showModal({
          title: '提示',
          content: res.data.msg,
          icon: 'error',
          mask: true,
          showCancel: false, // 不显示取消按钮
          confirmText: '确定', // 确认按钮的文本
        })
      }
    } else if (res.data.code === 500) {
      uni.showModal({
        title: '提示',
        content: res.data.msg,
        icon: 'error',
        mask: true,
        showCancel: false, // 不显示取消按钮
        confirmText: '确定', // 确认按钮的文本
      })
    }
  },
  (err) => {
    // TODO 5. 处理403错误
    // 错误的特殊情况：权限不足，token过期=>拦截到登录
    console.log(err)

    // 根据实际的响应结构获取状态码
    const status = err.response ? err.response.code : null

    if (status === 403) {
      uni.showToast({
        title: '登陆过期',
        icon: 'error',
        mask: true,
      })
      router.redirectTo({
        path: '/pages/loginPage/index',
      })
    } else {
      // 其他错误提示
      uni.showToast({
        title: '提示',
        info: '请求失败，请稍后再试',
        icon: 'error',
        mask: true,
      })
    }

    return Promise.reject(err)
  }
)

export default instance
export { baseURL }
